home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
WINDOWS
/
PROFFT.ARJ
/
PROFFT.H
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-28
|
29KB
|
727 lines
/****************************************************************************
PROFFT.H Denne filen inneholder (i denne rekkef°lgen):
*****************************************************************************
PROTOTYPER:
extern HANDLE hByteToComplexTable;
extern BOOL bCircleRubber;
extern BOOL bShiftCenter;
void SetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH, BYTE Colour);
BYTE GetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH);
void SetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ);
void GetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ);
KLASSEDEFINISJONER:
class TPROffApp : public TApplication
class TMainWindow : public TMDIFrame
class TProgressDialog : public TDialog
class TGenericPicWindow : public TWindow
class TPictureWindow : public TGenericPicWindow
class TComplexWindow : public TGenericPicWindow
class TPROfftFileDialog : public TFileDialog
class TFilter1 : public TDialog
class TFilter2 : public TDialog
class TOptions : public TDialog
****************************************************************************/
#ifndef __PROFFT_H
#define __PROFFT_H
#ifndef __STRING_H
#include <string.h>
#endif
#ifndef __FILEDIAL_H
#include <filedial.h>
#endif
#ifndef __PROFFTID_H
#include "profftid.h"
#endif
#ifndef __PRCOMP_H
#include "prcomp.h"
#endif
/****************************************************************************
Se PROFFT.CPP for deklarering av variablene under
****************************************************************************/
extern HANDLE hByteToComplexTable;
extern BOOL bCircleRubber;
extern BOOL bShiftCenter;
/****************************************************************************
SetBMPPixel (see MISCFUNC.CPP for description)
****************************************************************************/
void SetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH, BYTE Colour);
/****************************************************************************
GetBMPPixel (see MISCFUNC.CPP for description)
****************************************************************************/
BYTE GetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH);
/****************************************************************************
SetComplex (see COMPWIN.CPP for description)
****************************************************************************/
void SetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ);
/****************************************************************************
GetComplex (see COMPWIN.CPP for description)
****************************************************************************/
void GetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ);
/****************************************************************************
fft (see FFT.CPP for description)
****************************************************************************/
int fft(prcomplex *z1, prcomplex *z2, int n);
/****************************************************************************
PowerOf2 (see GENPWIN.CPP for description)
****************************************************************************/
int PowerOf2(long l);
class TPROffApp : public TApplication
/****************************************************************************
Starter opp applikasjonen. Instansieres av statisk variabel i WinMain.
Konstruktoren kaller InitMainWindow() som vi har tatt over i vσr applikasjon,
og vi fσr dermed kontrollen.
Superklasser: TApplication
Subklasser: Ingen.
Kompatibilitet: Kun med ObjectWindows klassebibliotek for Borland C++ 3.0.
Skrevet av: MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
***************************************************************************/
{
public:
TPROffApp(LPSTR AName, HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
: TApplication(AName, hInstance, hPrevInstance, lpCmdLine, nCmdShow)
{HAccTable=LoadAccelerators(hInstance, "PROFFTACC");};
private:
virtual void InitMainWindow();
};
class TMainWindow : public TMDIFrame
/****************************************************************************
Dette er hovedobjektet (hovedvinduet) i applikasjonen vσr. Det er dette
vinduet som mottar alle beskjeder fra menyen og som sender beskjeden
videre til et eventuellt barnevindu (TPictureWindow eller TComplexWindow).
Det hσndterer ogsσ alle barnevinduer m.h.p. posisjon, ikonisering o.l.
Alle medlemsfunksjonene finnes og er nµrmere beskrevet i MAINWIN.CPP.
Instansieres av TApplication.InitMainWindow()
Superklasser: TMDIFrame
Subklasser: Ingen.
Skrevet av: MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
24.3.92/MK: La inn initialiseringskode for σ lage 64 fargers grσtonepalette.
24.4.92/MK: Forandret fra 64 til 256 grσtoner.
Eventuellt:
****************************************************************************/
{
public:
// Initialisering og deallokering..
TMainWindow(LPSTR ATitle);
~TMainWindow();
// Opprettelse av barnevinduer/objekter..
virtual PTWindowsObject CreateChild(LPSTR FileName,
BITMAPINFO *bmpInfo, HBITMAP hBitmap);
virtual PTWindowsObject CreateComplexChild(LPSTR lpszCaption,
HANDLE hComplexPict, BITMAPINFO *bmpInfo, HANDLE hBitmap);
// F°lgende funksjoner svarer pσ beskjeder fra Windows..
BOOL WMQueryNewPalette(TMessage&) = [WM_QUERYNEWPALETTE];
virtual void WMIdle(TMessage& Msg) = [WM_ENTERIDLE];
virtual void WMDrawClipboard(TMessage& Msg) = [WM_DRAWCLIPBOARD];
virtual void WMChangeCBChain(TMessage& Msg) = [WM_CHANGECBCHAIN];
// F°lgende funksjoner svarer pσ menyvalg fra vσr applikasjon..
virtual void CMFileOpen(TMessage&) = [CM_FIRST + CM_MDIFILEOPEN];
virtual void CMFileSaveAs(TMessage&) = [CM_FIRST + CM_FILESAVEAS];
virtual void CMEditCut(TMessage&) = [CM_FIRST + CM_EDITCUT];
virtual void CMEditCopy(TMessage&) = [CM_FIRST + CM_EDITCOPY];
virtual void CMEditPaste(TMessage&) = [CM_FIRST + CM_EDITPASTE];
virtual void CMTransformFFT(TMessage&) = [CM_FIRST + CM_TRANSFFT];
virtual void CMTransformInvert(TMessage&) = [CM_FIRST + CM_TRANSINVERT];
virtual void TMainWindow::CMTransformIFFT(TMessage&) = [CM_FIRST + CM_TRANSIFFT];
virtual void CMFilterLowpass(TMessage&) = [CM_FIRST + CM_FILTERLOWPASS];
virtual void CMFilterBandpass(TMessage&) = [CM_FIRST + CM_FILTERBANDPASS];
virtual void CMFilterHighpass(TMessage&) = [CM_FIRST + CM_FILTERHIGHPASS];
virtual void CMFilterBandstop(TMessage&) = [CM_FIRST + CM_FILTERBANDSTOP];
virtual void CMFilterBWLowpass(TMessage&) = [CM_FIRST + CM_FILTERBWLOWPASS];
virtual void CMFilterBWHighpass(TMessage&) = [CM_FIRST + CM_FILTERBWHIGHPASS];
virtual void CMFilterFreehand(TMessage&) = [CM_FIRST + CM_FILTERFREEHAND];
virtual void CMFilterOptions(TMessage&) = [CM_FIRST + CM_FILTEROPTIONS];
virtual void CMHelpIndex(TMessage&) = [CM_FIRST + CM_HELPINDEX];
virtual void CMHelpAbout(TMessage&) = [CM_FIRST + CM_HELPABOUTPROFFT];
// St°ttefunksjoner for andre som bruker dette objektet
// sine datamedlemmer.
void SetRubberSize(int iSize);
int GetRubberSize();
HPALETTE CreateGrayscalePalette();
// Medlemsvariable..
HPALETTE hPal; // Brukes av TPictureWindow og TComplexWindow
// Inneholder en handle til en 256 grσtoners
// palette. Sparer plass ved σ si at alle
// barnevinduene bruker hovedvinduet sin palette.
HCURSOR hcrWait; // Brukes av flere for σ vise timeglasset.
// Hentes fram under initialisering av TMainWindow
// objektet og brukes siden av forskjellige objekter
// i systemet for σ vise timeglasset.
HPEN hRubber; // Brukes av TComplexWindow til σ tegne filtre.
// Lages under initialisering av TMainWindow.
HCURSOR hcrRubber;// Brukes av TComplexWindow for σ tegne filtercursor
// Lages under initialiseringen av TMainWindow.
// Forandres hvis brukeren forandre st°rrelse/
// form i TOptions dialogboksen.
private:
// Private st°ttefunksjoner
void SetupWindow();
virtual BOOL CanClose();
BOOL CheckForHelp(int CM_ID);
BOOL LoadBitmapFile(LPSTR Name);
BOOL SaveBitmapFile(LPSTR Name);
BOOL OpenDIB(int TheFile, LPSTR FileName);
void GetBitmapData(int TheFile, HANDLE BitsHandle, long BitsByteSize);
void WriteBitmapData(int TheFile, HANDLE BitsHandle,long BitsByteSize);
void CreateClipboardChild();
void ChangeRubber();
virtual void GetWindowClass(WNDCLASS& wc);
virtual LPSTR GetClassName();
HWND hwndNextViewer; // Handle til neste vindu i Clipboardviewer
// kjeden. Kreves av Windows for at man skal
// fσ tilgang til clipboard dataene og beskjed
// nσr dataene forandres. Brukes av
// WMDrawClipboard og WMChangeCBChain.
int iRubberSize; // Inneholder st°rrelsen pσ viskelµret.
// Brukes av SetRubberSize og GetRubberSize.
// Forandres nσr brukeren velger ny st°rrelse
// i Options dialogboksen.
BOOL bHelp; // Settes hvis brukeren trykker hjelp.
// Oppdateres av WMIdle som sjekker om
// brukeren trykker shift F1.
// De f°lgende variable brukes til σ lage viskelµrcursoren.
// De initialiseres i SetupWindow og forandres senere v.h.a.
// SetRubberSize som kalles nσr brukeren velger Options
// dialogboksen.
HDC hdcBitmap;
int cxCursor, cyCursor, cbSize;
HBITMAP hbm, hbmOld;
HANDLE hmemAND, hmemXOR;
LPSTR lpAND, lpXOR;
HBRUSH hbrWhite, hbrBlack;
};
class TProgressDialog : public TDialog
/****************************************************************************
Dette er en dialogboks som viser hvor langt brukeren er kommet i en
tidkrevende operasjon. Den s°rger ogsσ for at brukeren har muligheten
for σ avbryte en operasjon.
Instansieres av tidkrevende operasjoner i TPictureWindow og
TComplexWindow (FFT og en del operasjoner i den forbindelsen).
Alle medlemsfunksjonene finnes og er nµrmere beskrevet i PROFFTDB.CPP.
Superklasser: TDialog
Subklasser: Ingen
Skrevet av:
MK
****************************************************************************/
{
public:
TProgressDialog(PTWindowsObject AParent, LPSTR lpszDialogName, LPSTR lpszCaption);
~TProgressDialog();
// Svarer pσ beskjeder fra Windows
virtual void WMInitDialog(RTMessage Msg) = [WM_FIRST + WM_INITDIALOG];
virtual void WMCommand(RTMessage Msg) = [WM_FIRST + WM_COMMAND];
// Svarer pσ beskjeder fra foreldreobjektet (det objektet som
// instansierte objektet).
virtual void WMSetText(RTMessage Msg) = [WM_FIRST + WM_SETPROGRESSTEXT];
virtual void WMSetProgress(RTMessage Msg) = [WM_FIRST + WM_SETPROGRESS];
// Gir foreldreobjektet mulighet for σ sjekke om brukeren har
// avbrutt den nσvµrende operasjonen.
BOOL CancelPressed();
private:
BOOL bCancel; // Inneholder hvorvidt brukeren har trykket
// pσ Cancel knappen. Initialiseres til FALSE
// ved initialisering av objektet. Settes til
// TRUE hvis objektet mottar beskjed fra Windows
// om at Cancelknappen er trykket (gjennom WMCommand).
// Inneholder teksten i dialogboksen
char acPercentage[5];
char acMessage[MAX_CAPTION_LENGTH];
// Inneholder prosent ganger 100 hvor langt vi er kommet hittil.
// Brukes i WMSetProgress for σ sjekke om vi er kommet lenger enn
// forrige gang (i %).
long lSoFar;
// Handle til pennen vi tegner i prosentfirkanten. Initialiseres
// ved initialisering av objektet, deallokeres i destructoren.
HBRUSH hBrush;
// Husker tegneflaten til denne dialogboksen. Initialiseres
// sammen med objektet.
HDC hdc;
RECT rect;
// Handle til Cancelknappen. Initialiseres sammen med objektet.
HWND hCtrl;
};
class TGenericPicWindow : public TWindow
/****************************************************************************
Dette er superklassen til TPictureWindow og TComplexWindow. Denne klassen
inneholder de generelle tingene som begge subklassene trenger, f.eks.
standard vindushσndtering.
Instansieres av konstruktoren i TPictureWindow eller TComplexWindow.
Alle medlemsfunksjonene finnes og er nµrmere beskrevet i GENPWIN.CPP.
Superklasser: TWindow
Subklasser: TPictureWindow, TComplexWindow
Skrevet av:
MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
20.4.92/MK: La inn st°ttefunksjoner for lettere kopiering av nye
objekter, samt muligheten for σ manipulere bitmaps
som ikke n°dvendigvis var allokert av objektet (dvs.
gj°re ting over i en ny bitmap).
****************************************************************************/
{
public:
// Initialisering og deallokering
TGenericPicWindow(PTWindowsObject AParent, LPSTR FileName,
BITMAPINFO *bmpInfo, HANDLE hBitmap, BOOL bBitmap);
virtual ~TGenericPicWindow();
// Svarer pσ beskjeder fra Windows
virtual void WMSize(TMessage&) = [WM_FIRST + WM_SIZE];
virtual void Paint(HDC, PAINTSTRUCT&);
// Funksjoner som dette objektet kan gj°re med seg selv
void EditCopy(); // Kopierer DIBitmap over i clipboard
// Peker til bildestrukturdataene, som inneholder st°rrelse,
// farger i bildet osv. (se beskrivelse av BITMAPINFO struktur).
// Brukes av TPictureWindow og TComplexWindow objektene.
LPBITMAPINFO bmpInfo;
// Handle til selve bitmappen. Initialiseres i konstruktoren og
// brukes senere av LockBMP og UnlockBMP og
// av TPictureWindow og TComplexWindow objektene.
HANDLE hBitmap;
// Husker opprinnelsen til objektet (vanligvis filnavn, men kan
// ogsσ komme fra clipboard.
// Brukes av TPictureWindow og TComplexWindow objektene.
char FileName[MAXPATH];
// St°ttefunksjoner for hσndtering/duplisering av objektet.
// Brukes av TPictureWindow og TComplexWindow objektene.
void CopyBMP(HANDLE hSourceBitmap, HANDLE hTargetBitmap);
void CopyBMPInfo(LPSTR source, LPSTR target);
void AdjustScroller();
BITMAPINFO* MakeDuplicateBMPInfo(LPBITMAPINFO source);
// St°ttefunksjoner for σ fσ tilgang til bitmappen
BOOL LockBMP();
void UnlockBMP();
// Peker til bitmappen. MERK! Denne er ikke gyldig f°r LockBMP
// er kallt. Da er den gyldig til UlockBMP kalles igjen.
char huge *hpBitmap;
// En peker til en Statusdialogboks som viser hvor langt vi er
// kommet i en operasjon og gir brukeren muligheten for σ avbryte.
TProgressDialog *pdbProgress;
};
class TPictureWindow : public TGenericPicWindow
/****************************************************************************
Dette er subklassen til TGenericPicWindow og er det objektet som brukes
til σ vise "simple" bitmapbilder pσ skjermen. Disse kan enten hentes fra
disk eller fra clipboard. Den har bare en utvidelse i forhold til
TGenericPicWindow, nemlig FFT transformen som tar seg av σ transformere
bildet over i et TComplexWindow objekt.
Instansieres av TMainWindow.CreateChild(..).
Alle medlemsfunksjonene finnes og er nµrmere beskrevet i PICTWIN.CPP.
Superklasse: TGenericPicWindow
Subklasse: Ingen.
Skrevet av: MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
****************************************************************************/
{
public:
// Initialisering
TPictureWindow(PTWindowsObject AParent, LPSTR FileName,
BITMAPINFO *bmpInfo, HANDLE hBitmap) :
TGenericPicWindow(AParent, FileName, bmpInfo, hBitmap, TRUE) {};
// Svarer pσ beskjeder fra Windows
virtual void WMMDIActivate(RTMessage Msg) = [WM_FIRST + WM_MDIACTIVATE];
// Utf°rer FFT pσ dette bildeobjektet. Instansierer et
// TComplexWindow objekt ved σ kalle TMainWindow.CreateComplexChild
// og kopiere seg selv over i dette. Deretter ber det om at det
// nye komplekse objektet utf°rer FFT pσ seg selv. Kalles fra
// TMainWindow.CMTransformFFT.
void PerformFFT();
// Inverterer seg selv. Kalles fra CMTransformInvert.
void Invert();
private:
// Setter de aktuelle menyvalg for dette objektet. Kalles ved
// aktivisering av dette objektet (vinduet) v.h.a. WMMDIActivate.
void SetMenuItems(WORD wStatus);
// Registrerer vindusklassen og velger standardicon
virtual void GetWindowClass(WNDCLASS& wc);
virtual LPSTR GetClassName();
};
class TComplexWindow : public TGenericPicWindow
/****************************************************************************
Dette er subklassen til TGenericPicWindow og er det objektet som brukes
til de komplekse bildene. Det bildet som synes pσ skjermen er en
logaritmisk amplitude/frekvens representasjon. De egentlige dataene
ligger pσ et eget allokert omrσde (pekt pσ av ComplexPicture pekeren).
Instansieres av TMainWindow.CreateComplexChild(..)
Alle medlemsfunksjonene med unntak av ExecuteSmallDialog() og
ExecuteLargeDialog() finnes og er nµrmere beskrevet i COMPWIN.CPP.
De to f°rstnevne finnes sammen med de andre dialogboksene i PROFFTDB.CPP.
Superklasse: TGenericPicWindow
Subklasse: Ingen.
Skrevet av: MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
20.4.92/MK: La inn filtre m.m.
****************************************************************************/
{
public:
// Initialisering og deallokering
TComplexWindow(PTWindowsObject AParent, LPSTR lpszCaption,
HANDLE hComplexPict, BITMAPINFO *bmpInfo, HANDLE hBitmap);
~TComplexWindow();
// Svarer pσ Windows beskjeder
virtual void WMMDIActivate(RTMessage) = [WM_FIRST + WM_MDIACTIVATE];
virtual void WMSetCursor(RTMessage Msg) = [WM_FIRST + WM_SETCURSOR];
virtual void Paint(HDC, PAINTSTRUCT& PaintStruct);
virtual void WMLButtonDown(RTMessage Msg) = [WM_FIRST + WM_LBUTTONDOWN];
virtual void WMLButtonUp(RTMessage Msg) = [WM_FIRST + WM_LBUTTONUP];
virtual void WMRButtonDown(RTMessage) = [WM_FIRST + WM_RBUTTONDOWN];
virtual void WMMouseMove(RTMessage Msg) = [WM_FIRST + WM_MOUSEMOVE];
// Operasjoner som det komplekse objektet kan utf°re pσ seg selv.
// Alle operasjoner som gj°res pσ det komplekse objektet skjer ved
// at objektet f°rst lager en kopi av seg selv og utf°rer operasjonen
// pσ kopien. Orginalen beholdes alltid!
void PerformIFFT(); // Inverstransformen
void PerformFFT(); // Vanlig fouriertransform
void ExecuteFilter(HDC hdcMem); // Filtrering
// Starter filterdialogboksene og kaller PrepareToExecuteFilter()
// hvis brukeren avslutter dialogboksen ved σ trykk OK knappen.
void ExecuteSmallDialog(); // Filtre med en radius
void ExecuteLargeDialog(); // Filtre med to radiuser
void PrepareToExecuteFilter(); // Klargj°ring for filtrering
// Nedenfor f°lger en del statusdata om objektets tilstand.
// Disse dataene kunne med fordel
// ha blitt flyttet over i konstruktoren og blitt satt der, slik
// at vi kunne unngσtt og ha de som public i dette objektet, men
// dessverre rakk ikke tiden til.. Dataene kopieres over i det
// nye objektet og settes slik at objektet oppdaterer seg selv
// ved σ vise sin komplekse representasjon.
// Minste og st°rste radius i filterdialogboksen.
int iLowerValue;
int iUpperValue;
// Type filter som er utf°rt pσ dette objektet.
int iFilterType;
// Forteller om det komplekse bildet i objektet er sentrert.
BOOL bWasShiftCentered;
// Forteller om Paint rutinen skal vise filterverdiene som r°de
// sirkler i bildet.
BOOL bShowFilter;
// Forteller om det er n°dvendig σ lage bitmappen pσ nytt fra det
// komplekse bildet. Det er for eksempel ikke n°dvendig ved de filtrene
// som fjerner deler av frekvensplanet, da tegner vi rett i det komplekse
// og rett inn i bitmappen samtidig. Men med Butterworth filtrene som
// modifiserer alle punktene i det komplekse bildet mσ vi lage hele
// bitmapbildet pσ nytt.
BOOL bDirty;
// Forteller om det er n°dvendig σ foreta reskalering av det komplekse
// bildet. Dette gj°res ikke ved fjerning av deler i frekvensplanet,
// da vi ville fσtt et gap fra 0 til den minste amplituden som ville
// blitt reservert til en del grσtoner, selv om det faktisk ikke er
// noen deler som havner i denne rangen. Men ved bruk av Butterworth
// er vi n°dt til σ reskalere bildet fordi denne forandrer pσ rangen
// av hvilke grσtoner vi trenger σ vise.
BOOL bRescale;
private:
// Tidkrevende st°ttefunksjoner i forbindelse med transformen.
// Alle returnerer TRUE hvis operasjonen ble fullf°rt, FALSE
// ellers. Hvis en operasjon ble avbrutt s°rger kallrutinen for
// σ rydde opp, slik at alt blir som f°r operasjonen ble satt i
// gang.
BOOL FFT(HANDLE hTarget);
BOOL UpdateBitmap();
BOOL ConvertBMPToComplex(HANDLE hSourceBitmap, HANDLE hTargetComplex);
BOOL ConvertComplexToBMP(HANDLE hSourceComplex, HANDLE hTargetBitmap);
BOOL MakeComplexConjugate(HANDLE hComp);
// St°ttefunksjoner for objektet
// Setter/tar vekk de aktuelle menyvalgene nσr vinduet blir
// aktivert deaktivert
void SetMenuItems(WORD wStatus);
// Kopierer et komplekst bilde over i et annet.
void CopyComplex(HANDLE hSource, HANDLE hTarget);
// Locker det komplekse bildet, setter hpComplex til σ peke
// pσ bildet.
BOOL LockComplex();
// Unlocker det komplekse bildet.
void UnlockComplex();
// Tegner med r°dt hvis museposisjonen befinner seg innenfor
// bildet i klientomrσdet. Kalles av WMLButtonDown og
// WMMouseMove.
void DrawFreehand(RTMessage Msg);
// Registrerer vindusklassen og velger standardicon
virtual void GetWindowClass(WNDCLASS& wc);
virtual LPSTR GetClassName();
// Brukes til σ lagre st°rste og minste verdi i bildet ved reskalering.
// Dette gj°res for at vi skal representere det komplekse bildet
// best mulig ved hjelp av de grσtonene vi har til rσdighet.
real MaxLogAmplitude, MinLogAmplitude;
// Handle til det komplekse bildet. Brukes av LockComplex og
// UnlockComplex.
HANDLE hComplex;
// Huge pointer til det komplekse bildet. Kun brukbar etter
// en LockComplex (men ikke etter UnlockComplex).
prcomplex huge *hpComplex;
// Forteller om brukeren har venstre museknapp nede. Settes og
// brukes av WMLButtonDown, WMLButtonUp, WMRButtonDown og WMMouseMove.
BOOL bButtonDown;
// Diverse variable som holder status til den flaten vi tegner
// pσ ved frihσndsfiltrering. Inneholder ogsσ brushen og
// pennen vi tegner med.
HDC DragDC;
HBRUSH hbrRed;
HPEN hpenRed;
// Denne fσr vite fra Windows v.h.a. en SetPixel ved initialisering
// av objektet hvordan dette datasystemet representerer fargen r°d
// slik at frihσndsfilteret kan finne igjen denne fargen ved senere
// filtrering.
DWORD rgbRed;
// Et komplekst tall som settes = 0 ved initialisering av objektet.
// Denne verdien brukes ved nullstilling av deler av det komplekse
// bildet (raskere σ kopiere en verdi en σ "regne" om til null hver
// gang).
prcomplex compZero;
};
class TPROfftFileDialog : public TFileDialog
/****************************************************************************
Standardobjektet som brukes i forbindelse med filσpning og lagring.
Kalles fra TMainWindow.CMFileOpen og TMainWindow.CMFileSaveAs nσr brukeren
velger Open eller Save As fra menyen.
Superklasser: TFileDialog
Subklasser: Ingen.
Skrevet av:
MK
Sist forandret:
12.3.92/MK: Lagde klassedefinisjonen
****************************************************************************/
{
public:
// Initialisering. Kaller den aktuelle fildialogboksen. ResourceID
// inneholder CM_FILEOPEN eller CM_FILESAVEAS ettersom vi °nsker
// en filσpne eller fillagre dialogboks.
TPROfftFileDialog(PTWindowsObject AParent, int ResourceId,
LPSTR AFilePath, PTModule AModule = NULL)
: TFileDialog(AParent, ResourceId, AFilePath, AModule)
{ strcpy(Extension, ".bmp"); } // Sender med default file extension.
};
class TFilter1 : public TDialog
/****************************************************************************
Dette er dialogboksen som brukes ved alle filtre som krever en radius.
Dvs. CM_FILTERLOWPASS, CM_FILTERHIGHPASS, CM_FILTERBWLOWPASS,
CM_FILTERBWHIGHPASS. Konstruktoren bare setter opp
kontrollene i dialogboksen.
Skrevet av:
SA.
Sist forandret:
30.03.92 SA Lagde klassedefinisjonen.
21.04.92 MK St°tte for "hold and drag" scrollbarene med oppdatering.
****************************************************************************/
{
public:
// Initialisering
TFilter1(PTWindowsObject AParent, LPSTR AName);
// Svarer pσ beskjeder fra Windows
virtual void WMHScroll(RTMessage Msg) = [WM_FIRST + WM_HSCROLL];
virtual void WMInitDialog(RTMessage Msg) = [WM_FIRST + WM_INITDIALOG];
// Svarer pσ beskjeder fra Windows ved aktivisering av de forskjellige
// kontrollene. Brukes for σ oppdatere alle feltene i dialogboksen.
virtual void IDHScrollBar(RTMessage Msg) = [ID_FIRST + DB_SCROLLFREQUENCY];
virtual void IDEditFrequency(RTMessage Msg) = [ID_FIRST + DB_EDITFREQUENCY];
// Returnerer om vi tillater lukning av boksen (om verdiene er lovlige).
virtual BOOL CanClose();
private:
// Oppdaterer foreldreobjektet sine parametre (hvis brukeren avslutter
// ved σ trykke OK knappen).
void UpdateParent();
// Brukes til σ lagre maksimalverdien for radiusen (sparer oss for
// gjentatte flyttallsoperasjoner).
int iMax;
};
class TFilter2 : public TDialog
/****************************************************************************
Dette er dialogboksen som brukes ved alle filtre som krever to radiuser.
Dvs. CM_FILTERBANDPASS, CM_FILTERBANDSTOPP. Konstruktoren bare setter opp
kontrollene i dialogboksen.
Skrevet av:
SA.
Sist forandret:
30.03.92 SA Lagde klassedefinisjonen.
21.04.92 MK St°tte for "hold and drag" scrollbarene med oppdatering.
****************************************************************************/
{
public:
// Initialisering
TFilter2(PTWindowsObject AParent, LPSTR AName);
// Svarer pσ beskjeder fra Windows
virtual void WMInitDialog(RTMessage Msg) = [WM_FIRST + WM_INITDIALOG];
virtual void WMHScroll(RTMessage Msg) = [WM_FIRST + WM_HSCROLL];
// Svarer pσ beskjeder fra Windows ved aktivisering av de forskjellige
// kontrollene. Brukes for σ oppdatere alle feltene i dialogboksen.
virtual void IDHScrollBar1(RTMessage Msg) = [ID_FIRST + DB_SCROLLFREQUENCY1];
virtual void IDHScrollBar2(RTMessage Msg) = [ID_FIRST + DB_SCROLLFREQUENCY2];
virtual void IDEditFrequency1(RTMessage Msg) = [ID_FIRST + DB_EDITFREQUENCY1];
virtual void IDEditFrequency2(RTMessage Msg) = [ID_FIRST + DB_EDITFREQUENCY2];
// Returnerer om vi tillater lukning av boksen (om verdiene er lovlige).
virtual BOOL CanClose();
private:
// Oppdaterer foreldreobjektet sine parametre (hvis brukeren avslutter
// ved σ trykke OK knappen).
void UpdateParent();
// Brukes til σ lagre maksimalverdien for radiusen (sparer oss for
// gjentatte flyttallsoperasjoner).
int iMax;
};
/****************************************************************************
Dette er dialogboksen som lar brukeren forandre pσ standardopsjonene i programmet.
Allokerer objektene i dialogboksen. Sender parametrene videre til
superklassen som henter dialogboksen fra ressursfilen.
class TOptions
Skrevet av:
SA.
Sist forandret:
05.04.92 SA Lagde klassedefinisjonen.
21.04.92 MK La inn st°tte for "hold and drag" pσ scrollbarene.
25.04.92 MK Opsjon for σ sentrere i frekvensplanet.
Radiobuttons for forskjellige typer viskelµr.
****************************************************************************/
class TOptions : public TDialog
{
public:
// Initialisering
TOptions(PTWindowsObject AParent, LPSTR AName);
// Svarer pσ Windows beskjeder
virtual void WMInitDialog(RTMessage Msg) = [WM_FIRST + WM_INITDIALOG];
virtual void WMCommand(RTMessage Msg) = [WM_FIRST + WM_COMMAND];
virtual void WMHScroll(RTMessage Msg);
// Svarer pσ Windows beskjeder nσr brukeren aktiverer scrollbaren
// i dialogboksen.
virtual void IDHScrollBar(RTMessage Msg) = [ID_FIRST + DB_SCROLLRUBBER];
// Sjekker om brukeren avslutt med OK knappen. Hvis sσ, oppdater
// datamedlemmene fra slik de nσ er satt i dialogboksen.
virtual void CloseWindow(int iRetValue);
};
#endif